import { getFlatRoutes } from '@/utils'
import { defineStore } from 'pinia'

export const useUserStore = defineStore({
  // id: 必须的，在所有 Store 中唯一
  id: 'userState',
  // state: 返回对象的函数
  state: () => ({
    // 登录token
    token: null,
    // 登录用户信息
    userInfo: {},
    // 角色
    roles: localStorage.roles ? JSON.parse(localStorage.roles) : [],
  }),
  getters: {},
  // 可以同步 也可以异步
  actions: {
    // 登录
    login(userInfo) {
      const { username, password } = userInfo
      return new Promise(async (resolve, reject) => {
        this.token = username
        this.userInfo = userInfo
        await this.getRoles()
        resolve(username)
      })
    },
    // 获取用户授权角色信息，实际应用中 可以通过token通过请求接口在这里获取用户信息
    getRoles() {
      return new Promise((resolve, reject) => {
        // 获取权限列表 默认就是超级管理员，因为没有进行接口请求 写死
        const response = [
          {
            menuId: 329,
            menuPath: '/form',
            menuName: 'DashBoard',
            menuIcon: null,
            menuSort: 1,
            parentId: 0,
            platformId: 37,
            status: 0,
            deleted: 0,
            createTime: '2023-06-02 16:38:03',
            updateTime: null,
            children: [
              {
                menuId: 331,
                menuPath: '/form/validateForm',
                menuName: '一周新增现状图',
                menuIcon: null,
                menuSort: 6,
                parentId: 329,
                platformId: 37,
                status: 0,
                deleted: 0,
                createTime: '2023-06-02 18:10:43',
                updateTime: null,
                children: [],
                checked: false,
                platformName: null,
              },
              {
                menuId: 330,
                menuPath: '/form/advancedForm',
                menuName: '玩家统计',
                menuIcon: null,
                menuSort: 5,
                parentId: 329,
                platformId: 37,
                status: 0,
                deleted: 0,
                createTime: '2023-06-02 18:05:49',
                updateTime: null,
                children: [],
                checked: false,
                platformName: null,
              },
            ],
            checked: false,
            platformName: null,
          },
        ]
        const roles = getFlatRoutes(response)
        this.roles = roles
        localStorage.roles = JSON.stringify(this.roles)
        resolve(this.roles)
      })
    },
    // 获取用户信息 ，如实际应用中 可以通过token通过请求接口在这里获取用户信息
    getInfo(roles) {
      return new Promise((resolve, reject) => {
        this.roles = roles
        resolve(roles)
      })
    },
    // 退出
    logout() {
      return new Promise((resolve, reject) => {
        this.token = null
        this.userInfo = {}
        this.roles = []
        resolve(null)
      })
    },
  },
  // 进行持久化存储
  persist: {
    // 本地存储的名称
    key: 'userState',
    //保存的位置
    storage: window.localStorage, //localstorage
  },
})
